package interfaceDAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import classes.Lieu;

public class LieuJDBCDAO implements LieuDAOInterface{

private DataSource ds;
	
	public LieuJDBCDAO(){
		try{
			
		Context ctx = new InitialContext() ;
		ds = (DataSource) ctx.lookup("java:comp/env/jdbc/video");
		}
		catch(Exception e){
			System.out.println("exception constructeur DAO : " + e);
		}
	}

	@Override
	public ArrayList<Lieu> getLieuxList() {
		ArrayList<Lieu>lieuxList = new ArrayList<Lieu>();
		Connection con = null;
		
		try{
		    con = ds.getConnection();		
		    PreparedStatement pstmt=con.prepareStatement("SELECT ID,VILLE FROM LIEU");
			ResultSet rs = pstmt.executeQuery();
			while (rs.next()){
				lieuxList.add(new Lieu(rs.getLong(1),rs.getString(2)));
				}
			}
			catch(Exception e){
				System.out.println(e);
			}
			finally{
				if (con != null){
					
					try{
						con.close();
					}
					catch(Exception e)	{
						System.out.println(e);
					}
				}
			}		
		return lieuxList;
	}
	
	@Override
	public Lieu getById(Long id) {
		Connection con = null;
		Lieu lieu = null;

		try{
		    con = ds.getConnection();		
		    PreparedStatement pstmt=con.prepareStatement("SELECT VILLE FROM LIEU WHERE ID=?");
			pstmt.setLong(1, id);
			ResultSet rs = pstmt.executeQuery();
			if (rs.next()){
				lieu = new Lieu(id, rs.getString(1));
			}
		}
		catch(Exception e){
			System.out.println(e);
		}
		finally{
			if (con != null){
				
				try{
					con.close();
				}
				catch(Exception e)	{
					System.out.println(e);
				}
			}
		}					
		return lieu;
	}

	@Override
	public void create(Lieu lieu) {
		Connection con = null;		
		try{
		    con = ds.getConnection();
			PreparedStatement pstmt = con.prepareStatement("INSERT INTO LIEU (VILLE) VALUES (?)",new String[]{"ID"});
			pstmt.setString(1, lieu.getVille());
			pstmt.executeUpdate();
			ResultSet rs = pstmt.getGeneratedKeys();
			if(rs.next())
				lieu.setId(rs.getLong(1));
		}
		
		catch(Exception e){
			System.out.println("Exception methode create de la DAO Lieu : " + e);
		}
		finally{
			if (con != null){
				
				try{
					con.close();
				}
				catch(Exception e)	{
					System.out.println(e);
				}
			}
		}				
	}

	@Override
	public void update(Lieu lieu) {
		Connection con = null;
		try{
			con = this.ds.getConnection();
			PreparedStatement pstmt = con.prepareStatement("UPDATE LIEU SET VILLE = ? WHERE ID = ?");
			pstmt.setString(1, lieu.getVille());
			pstmt.executeUpdate();
		}
		catch(Exception e){
			System.out.println(e);
		}
		finally{
			if(con != null){
				try{
					con.close();
				}
				catch(Exception e){
					System.out.println(e);
				}
			}
		}	
	}

	@Override
	public void delete(Lieu lieu) {
		Connection con = null;	
		try{
	    con = ds.getConnection();		
		PreparedStatement pstmt = con.prepareStatement("DELETE LIEU WHERE ID = ?");
		pstmt.setLong(1, lieu.getId());
		pstmt.executeUpdate();
		
		pstmt = con.prepareStatement("DELETE SESSION_FORMATION WHERE ID_LIEU = ? ");
		pstmt.setLong(1, lieu.getId());
		pstmt.executeUpdate();
		}
		catch(Exception e){
			System.out.println(e);
		}
		finally{
			if (con != null){
				
				try{
					con.close();
				}
				catch(Exception e)	{
					System.out.println(e);
				}
			}
		}	
	}
}
